package com.mechinn.android.ouralliance.gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
import com.mechinn.android.ouralliance.data.JsonWrapper;
import com.mechinn.android.ouralliance.data.OurAllianceObject;
import com.mechinn.android.ouralliance.data.frc2015.MatchScouting2015;
import com.mechinn.android.ouralliance.data.frc2015.TeamScouting2015;
import com.mechinn.android.ouralliance.data.frc2015.TeamScouting2015Wrapper;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import timber.log.Timber;
public abstract class JsonWrapperAdapter<Wrapped extends OurAllianceObject> implements JsonSerializer<JsonWrapper<Wrapped>>, JsonDeserializer<JsonWrapper<Wrapped>> {
public abstract JsonWrapper<Wrapped> newAdapter();
public abstract Wrapped elementToObject(JsonElement element);
@Override
public JsonWrapper<Wrapped> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonWrapper<Wrapped> wrapper = newAdapter();
JsonObject object = json.getAsJsonObject();
if(wrapper.isType(object.get(JsonWrapper.TYPE).getAsString())) {
JsonArray dataList = object.getAsJsonArray(JsonWrapper.DATA);
if(dataList.size() == object.get(JsonWrapper.COUNT).getAsInt()) {
for(int i=0;i<dataList.size();i++) {
Wrapped newWrapped = elementToObject(dataList.get(i));
Timber.d("imported: "+newWrapped);
wrapper.add(newWrapped);
}
}
}
return wrapper;
}
@Override
public JsonElement serialize(JsonWrapper<Wrapped> src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject object = new JsonObject();
object.addProperty(JsonWrapper.TYPE,src.getTypeName());
object.addProperty(JsonWrapper.COUNT, src.getData().size());
object.add(JsonWrapper.DATA, OurAllianceGson.BUILDER.toJsonTree(src.getData()));
return object;
}
}